package Runde6;

public class Test {
	
	public static void main (String[] args) {
		
			//Erstelle Fabrik-Map
			Map fMap = new Map();
			
			//Fuege Fabriken in Fabri-Map ein
			for (int i = 1; i <= 3; i++) {
				String fName = "Fabrik " + i;
				System.out.println("Fuege \"" + fName + "\" zur Fabrik-Collection hinzu ...");
				map_add(fMap,fName,new_Fabrik(fName));
			}
			System.out.println();
			
			//Fuege Roboter in Fabriken aus Fabrik-Map ein
			System.out.println("Hole \"Fabrik 1\" aus Collection ...");
			Fabrik f1 = (Fabrik)fMap.get("Fabrik 1");
			System.out.println("Erstelle diverse Roboter und fuege sie Fabrik 1 hinzu ...");
			f1.addRoboter(new_RoboRaupe(1,150,new RolleLackier(12.5), 5000.2));
			f1.addRoboter(new_RoboRaupe(2,100,new RolleSchweiss(50), 2500.23));
			f1.addRoboter(new_RoboSchwenkarm(3,1,new RolleLackier(8), 100));
			
			System.out.println();
			System.out.println("Hole \"Fabrik 2\" aus Collection ...");
			Fabrik f2 = (Fabrik)fMap.get("Fabrik 2");
			System.out.println("Erstelle einen Roboter und fuege ihn Fabrik 2 hinzu ...");
			f2.addRoboter(new_RoboSchwenkarm(4,150,new RolleSchweiss(70), 4000));
			System.out.println();
			System.out.println("Hole \"Fabrik 3\" aus Collection ...");
			Fabrik f3 = (Fabrik)fMap.get("Fabrik 3");
			System.out.println("Erstelle diverse Roboter und fuege sie Fabrik 3 hinzu ...");
			f3.addRoboter(new_RoboSchwenkarm(5,120,new RolleSchweiss(65), 2200));
			f3.addRoboter(new_RoboRaupe(6,200,new RolleLackier(14.75),500.23));
			System.out.println();
			
			//Fuege, veraendere und entferne einzelne Roboter in/aus Fabriken
			System.out.println("Erhoehe Rotationen von (Schwenk)Roboter Nr. 3 aus \"Fabrik 1\" um 9 ...");
			((RoboSchwenkarm) f1.getRoboter(3)).addRotationen(9);
			System.out.println("Erhoehe Wegstrecke von (Raupen)Roboter Nr. 6 aus \"Fabrik 3\" um 1.05 ...");
			((RoboRaupe) f3.getRoboter(6)).addWegstrecke(1.05);
			System.out.println("Erhoehe Betriebsstunden von Roboter Nr. 4 as \"Fabrik 2\" um 15 ... ");
			f2.getRoboter(4).addBetriebsSt(15);
			System.out.println("Setze fuer Roboter Nr. 4 aus \"Fabrik 2\" Rolle zu \"TypLackier\" (Lackierroboter) mit 0.5l grossem Behaelter ...");
			f2.getRoboter(4).changeRolle(new RolleLackier(0.5));
			System.out.println("Setze fuer Roboter Nr. 1 aus \"Fabrik 1\" Rolle zu \"TypSchweisz\" (Schweiszroboter) mit Betriebstemperatur 40 ...");
			f1.getRoboter(1).changeRolle(new RolleSchweiss(1));
			System.out.println("Hole Roboter Nr. 5 aus \"Fabrik 3\" und fuege ihn \"Fabrik 2\" hinzu ... ");
			f2.addRoboter(f3.getRoboter(5));
			System.out.println("Entferne Roboter Nr. 5 aus \"Fabrik 3\" ... ");
			f3.removeRoboter(5);
			
			System.out.println();
			
			//Printe alle Statistiken aller Fabriken.
			System.out.println("=================== Statistiken der Fabrik 1: ===================");
			System.out.print(f1.statStunden());
			System.out.println();
			System.out.print(f1.statRotationen());
			System.out.println();
			System.out.print(f1.statStrecke());
			System.out.println();
			System.out.print(f1.statTemp());
			System.out.println();
			System.out.print(f1.statKapazitaet());
			
			System.out.println();
			
			System.out.println("=================== Statistiken der Fabrik 2: ===================");
			System.out.print(f2.statStunden());
			System.out.println();
			System.out.print(f2.statRotationen());
			System.out.println();
			System.out.print(f2.statStrecke());
			System.out.println();
			System.out.print(f2.statTemp());
			System.out.println();
			System.out.print(f2.statKapazitaet());
			
			System.out.println();
			
			System.out.println("=================== Statistiken der Fabrik 3: ===================");
			System.out.print(f3.statStunden());
			System.out.println();
			System.out.print(f3.statRotationen());
			System.out.println();
			System.out.print(f3.statStrecke());
			System.out.println();
			System.out.print(f3.statTemp());
			System.out.println();
			System.out.print(f3.statKapazitaet());
			
	}
	
	
	//------------ TESTMETHODEN DIE SICH AUCH UM EXCEPTIONS KUEMMERN UND DIESE WENN NOTWENDIG AUSRPRINTEN
	
	public static RoboSchwenkarm new_RoboSchwenkarm(int nr, int betrieb, Rolle roll, int rotation) {
		try {
			return new RoboSchwenkarm(nr,betrieb,roll,rotation);
		} catch (NonUniqueException e){
			System.out.print(e + "\n");
			return null;
		}
	}
	
	public static RoboRaupe new_RoboRaupe(int nr, int betrieb, Rolle roll, double wegstrecke) {
		try {
			return new RoboRaupe(nr,betrieb,roll,wegstrecke);
		} catch (NonUniqueException e){
			System.out.print(e + "\n");
			return null;
		}
	}
	
	public static Fabrik new_Fabrik(String name) {
		try {
			return new Fabrik(name);
		} catch (NonUniqueException e){
			System.out.print(e + "\n");
			return null;
		}
	}
	
	public static boolean map_add(Map m, Object k, Object c) {
		try {
			m.add(k,c);
			return true;
		} catch (InvalidTypeException e) {
			System.out.print(e + "\n");
			return false;
		}
	}
	


}
